<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>10.2 如何通过提示词设定AI的个性、语气和风格 - Langchain框架教程</title>
    <link rel="stylesheet" href="../shared_styles.css">
</head>
<body>
    <div class="container">
        <h1> 第十章：AI系统提示词设计进阶</h1>
        <section id="s10-2">
            <h2>10.2 如何通过提示词设定AI的个性、语气和风格</h2>
            <p>赋予AI独特的个性（Personality）、明确的语气（Tone）和一致的风格（Style）是提升用户体验和应用专业度的关键。系统提示词是实现这一目标的核心工具。通过精心措辞，我们可以引导LLM以特定的方式进行交流，使其不仅仅是一个信息提供者，更像是一个具有特定“人设”的对话伙伴。</p>

            <h3>关键要素与技巧</h3>
            <ol>
                <li>
                    <strong>明确的角色定义 (Explicit Role Definition):</strong>
                    <p>首先，给AI一个清晰的角色。例如：“你是一位风趣幽默的历史老师”，“你是一个严谨细致的科研助理”，“你是一个充满活力的健身教练”。角色本身就暗示了一定的个性和沟通风格。</p>
                </li>
                <li>
                    <strong>使用描述性词语 (Descriptive Adjectives and Adverbs):</strong>
                    <p>在系统提示中直接使用描述个性和语气的词汇。
                        <ul>
                            <li><strong>个性词汇：</strong>友好 (friendly), 热情 (enthusiastic), 耐心 (patient), 严谨 (rigorous), 乐观 (optimistic), 沉稳 (calm), 好奇 (curious), 权威 (authoritative), 谦逊 (humble), 风趣 (witty), 严肃 (serious) 等。</li>
                            <li><strong>语气词汇：</strong>正式 (formal), 非正式 (informal), 专业 (professional), 口语化 (colloquial), 鼓励性 (encouraging), 安慰性 (comforting), 批判性 (critical), 中立 (neutral) 等。</li>
                            <li><strong>风格词汇：</strong>简洁 (concise), 详细 (detailed), 富有表现力 (expressive), 结构化 (structured), 叙事性 (narrative), 教学式 (pedagogical) 等。</li>
                        </ul>
                        例如：“你的回答应该始终保持友好和耐心。”，“请以专业且正式的语气提供建议。”，“沟通时请使用简洁明了的风格。”
                    </p>
                </li>
                <li>
                    <strong>提供行为示例 (Provide Behavioral Examples - Implicit or Explicit):</strong>
                    <p>虽然在系统提示中直接给出大量对话示例可能不切实际，但可以描述期望的行为模式。
                        <ul>
                            <li>“当你解释复杂概念时，尝试使用简单的类比。” (暗示教学风格)</li>
                            <li>“在给出否定回答前，先表达理解和共情。” (暗示安慰和友好的个性)</li>
                            <li>“多使用积极的词汇和鼓励性的短语。” (暗示乐观的个性)</li>
                        </ul>
                    </p>
                </li>
                <li>
                    <strong>指定“不要做”的行为 (Specify "Don'ts"):</strong>
                    <p>明确指出不希望AI展现的个性和风格也同样重要。
                        <ul>
                            <li>“避免使用过于复杂的技术术语，除非用户明确要求。”</li>
                            <li>“不要显得不耐烦或轻视用户的问题。”</li>
                            <li>“禁止使用任何形式的讽刺或嘲笑。”</li>
                        </ul>
                    </p>
                </li>
                <li>
                    <strong>结合目标受众 (Consider the Target Audience):</strong>
                    <p>AI的个性、语气和风格应与其目标用户群体相匹配。例如，与儿童交流的AI应更加活泼、简单；面向专业人士的AI则应更加严谨、深入。</p>
                    <p>“你的目标用户是初学编程的大学生，所以请确保你的解释通俗易懂，并多给予鼓励。”</p>
                </li>
                <li>
                    <strong>一致性是关键 (Consistency is Key):</strong>
                    <p>确保在整个系统提示中，关于个性、语气和风格的指令是一致的，避免出现矛盾的描述。LLM在处理一致的指令时表现更好。</p>
                </li>
            </ol>

            <h3>示例：设定不同个性的AI助手</h3>
            <p>我们将使用Qwen模型演示如何通过系统提示词设定不同个性的AI助手，并让它们回答同一个问题，以观察其风格差异。</p>
            <pre><code class="language-python">
# (接上一节的Qwen LLM初始化代码)
# from langchain_openai import ChatOpenAI
# from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate
# from langchain_core.output_parsers import StrOutputParser
# import os
#
# api_key = os.environ.get("DASHSCOPE_API_KEY")
# qwen_llm = ChatOpenAI(
#     base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
#     api_key=api_key,
#     model="qwen-plus",
#     temperature=0.7 # 允许一些创造性来体现个性
# )

def create_persona_chain(system_prompt_content):
    prompt = ChatPromptTemplate.from_messages([
        SystemMessagePromptTemplate.from_template(system_prompt_content),
        HumanMessagePromptTemplate.from_template("{user_question}")
    ])
    return prompt | qwen_llm | StrOutputParser()

# 个性1：热情洋溢的鼓励者
system_prompt_encourager = """
你是一个名为“阳光小助”的AI助手。你的个性非常热情、积极和充满鼓励。
你的目标是激励用户，让他们对学习新事物充满信心。
语气：始终保持乐观和友好，多用感叹号和积极的词语！
风格：语言活泼，可以适当使用一些网络流行语（但要积极健康）。
"""
encourager_chain = create_persona_chain(system_prompt_encourager)

# 个性2：严谨认真的学者
system_prompt_scholar = """
你是一位学识渊博的AI学者，名为“文渊先生”。
你的个性严谨、认真，注重逻辑和证据。
语气：正式、客观、中立。避免使用情感色彩过于浓厚的词语。
风格：表达清晰、准确，结构化强。如果可能，引用相关概念或原理。
"""
scholar_chain = create_persona_chain(system_prompt_scholar)

# 个性3：简洁高效的执行者
system_prompt_executor = """
你是一个高效的AI执行助手，代号“闪电”。
你的个性直接、果断，以解决问题为首要目标。
语气：非常简洁，直奔主题。
风格：回答精炼，避免不必要的寒暄和修饰。如果可以，用点列式或数字列表呈现答案。
"""
executor_chain = create_persona_chain(system_prompt_executor)

# 同一个问题
user_query = "学习编程最重要的是什么？"

print(f"--- 热情洋溢的鼓励者 (阳光小助) ---")
print(f"用户: {user_query}")
print(f"阳光小助: {encourager_chain.invoke({'user_question': user_query})}\n")

print(f"--- 严谨认真的学者 (文渊先生) ---")
print(f"用户: {user_query}")
print(f"文渊先生: {scholar_chain.invoke({'user_question': user_query})}\n")

print(f"--- 简洁高效的执行者 (闪电) ---")
print(f"用户: {user_query}")
print(f"闪电: {executor_chain.invoke({'user_question': user_query})}\n")

            </code></pre>
            <p>运行上述代码，你会观察到对于同一个问题“学习编程最重要的是什么？”，三个不同“个性”的AI助手会给出风格迥异的回答：</p>
            <ul>
                <li><strong>阳光小助</strong> 可能会用很多感叹号，充满鼓励的词语，告诉你坚持下去一定能成功！</li>
                <li><strong>文渊先生</strong> 可能会从学习方法、逻辑思维、持续实践等方面给出结构化、偏理论的分析。</li>
                <li><strong>闪电</strong> 可能会直接列出1、2、3点核心要素，言简意赅。</li>
            </ul>

            <h3>迭代与微调</h3>
            <p>设定AI的个性、语气和风格通常不是一蹴而就的。你需要：</p>
            <ul>
                <li><strong>从小处着手：</strong> 先定义核心的1-2个个性/语气词。</li>
                <li><strong>测试多种表述：</strong> 同样的意图，用不同的词语组合在系统提示中表达，观察效果。</li>
                <li><strong>收集反馈：</strong> 如果可能，让真实用户与不同版本的AI交互，收集他们对AI个性的感知。</li>
                <li><strong>逐步迭代：</strong> 根据测试结果和反馈，不断调整和优化系统提示词，直到达到满意的效果。</li>
            </ul>
            <p>通过对系统提示词的精雕细琢，你可以让你的Langchain应用拥有独特且引人入胜的“灵魂”，从而在众多AI应用中脱颖而出。</p>
        </section>

        <div class="navigation">
            <a href="../../langchain_tutorial_outline.html">返回教程目录</a>
            <a href="../chapter10/chapter10_1_system_prompts.html">&larr; 上一节：10.1 系统提示词（System Prompts）的重要性</a>
            <a href="../chapter10/chapter10_3_ambiguity_uncertainty.html">下一节：10.3 处理歧义和不确定性的提示词策略 &rarr;</a>
        </div>
    </div>
</body>
</html>
